<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>包装类和内置构造函数</title>
  </head>
  <body>
    <!-- 
        常见的构造函数：
            Object 、 Array 、 String 、 Number
            一般来说只有对象才有对象方法
            但是有些时候简单数据类型也有方法，其实他是将他进行了包装
        
        基本包装类（他将简单的数据类型，包装成了复杂数据类型）：
            我们的字符串是有一些方法的，这些方法就是在构造函数中的方法
            js中几乎所有的数据都可以基于构造函数创建
     -->
    <script>
      // let str = 'hello'
      // 实际执行
      let str = new String("hello");

      // js底层实现
      function String(str) {
        this.length = function (str) {};
      }
    </script>

    <!-- 
        内置构造函数：
            引用数据类型：Object  RegExp  Array  Date 等
            包装数据类型：String  Number  Boolean 等
    -->

    <script>
        // 针对于构造函数的
        // Object  学习三个常用静态方法（只有构造函数可以调用）
    
        // 第一个 Object.keys（） 获取对象中的所有属性键
        const o = {name:'佩奇',age:6}
        // 获取对象所有的键，并返回一个数组
        const arr = Object.keys(o)
        console.log(arr);
        // 第二个 Object.values() 获取对象中的所有属性值
        // 获取对象中的所有值
        const arr1 = Object.values(o)

        // 第三个 Object.assign()  用于拷贝一个对象
        // 这是一个浅拷贝
        // 使用的场景是个对象添加属性
        // let oo = {}
        // Object.assign(oo,o)

        Object.assign(o,{gender:'女'})

    </script>

  </body>
</html>
